Temat |
---|
Dodawanie równań MES |
Poziom trudności |
Zaawansowany |
Czas wykonania |
1 dzień |
Autorzy |
JohnWang |
Wersja FreeCAD |
0.19 |
Pliki z przykładami |
Nie dołączono |
Zobacz również |
- |
W tym poradniku dodamy równanie Flow (przepływu) do FreeCAD i zaimplementujemy wsparcie dla solvera Elmer. Upewnij się, że przeczytałeś i zrozumiałeś stronę Rozszerzenie modułu MES przed przejściem do tego poradnika.
Zadanie można podzielić na pięć części:
W tym kroku zmodyfikujemy następujący plik:
Typ równania jest dzielony przez wszystkie obiekty równań różnych solverów. Każdy typ ma ciąg określający (np. "Heat" - ciepło) i dedykowane polecenie dodające równanie do wybranego solvera. To upraszcza GUI, ponieważ mamy tylko jeden przycisk dla równania ciepła, z którego korzystają wszystkie wspierane solvery.
Najpierw dodaj nowe równanie do modułu equationbase.py
. Każde równanie wymaga dwóch klas. Proxy dokumentu i proxy widoku. Te dwie klasy będą później używane jako klasy bazowe dla konkretnych klas równania Elmer. Po prostu skopiuj i wklej je z istniejącego typu równania i dostosuj ścieżkę ikony w getIcon(self)
proxy widoku.
class FlowProxy(BaseProxy):
pass
class FlowViewProxy(BaseViewProxy):
def getIcon(self):
return ":/icons/FEM_EquationFlow.svg"
W tym kroku zaimplementujemy obiekt dokumentu. Musimy dodać nowy plik flow.py
w:
i zmodyfikować następujące pliki:
Zacznijmy od dodania nowego pliku flow.py
. Ten plik można skopiować z istniejącego równania.
femsolver/elmer/equations/elasticity.py
.femsolver/elmer/equations/heat.py
.Równanie przepływu w Elmer jest potencjalnie nieliniowym równanie. Oznacza to, że oprzemy naszą pracę na heat.py
.
Po skopiowaniu heat.py
do flow.py
, dostosuj flow.py
w tych lokalizacjach:
create
,Proxy
,Type
klasy Proxy
,ViewProxy
.def create(doc, name="'''Flow'''"):
return femutils.createObject(
doc, name, Proxy, ViewProxy)
class Proxy(nonlinear.Proxy, equationbase.'''Flow'''Proxy):
Type = "Fem::EquationElmer'''Flow'''"
def __init__(self, obj):
super(Proxy, self).__init__(obj)
obj.Priority = 10
class ViewProxy(nonlinear.ViewProxy, equationbase.'''Flow'''ViewProxy):
pass
Następnie musisz zmienić właściwości dodane przez funkcję obj.addProperty(..)
na te wymagane przez równanie.
W momencie pisania tego poradnika równanie przepływu solvera Elmer nie miało żadnych specjalnych właściwości. Zobacz równanie elastyczności solvera Elmer jeśli potrzebujesz przykładu z właściwościami.
Wreszcie, należy zarejestrować definicję makeEquationFlow w src/Mod/Fem/ObjectsFem.py
poprzez zduplikowanie dostępnego wpisu.
FreeCAD korzysta z make do budowania programu. Więc musimy zarejestrować plik nowego modułu (flow.py
) w src/Mod/Fem/CMakeLists.txt
w sposób opisany na stronie Rozszerzenie modułu MES. Odpowiednie listy można łatwo znaleźć szukając plików modułów istniejących równań solvera Elmer.
W tym kroku zmodyfikujemy następujący plik:
Teraz sprawiliśmy, że FreeCAD rozpoznaje nowy typ równania a nawet dodaliśmy polecenie, które wstawia to równanie do obiektu wybranego solvera. Zaimplementowaliśmy też konkretny obiekt równania dla solvera Elmer. Pozostało utworzenie połączenia między solverem Elmer i równaniem przepływu. Należy to zrobić bezpośrednio w obiekcie solvera Elmer.
Zarejestruj moduł, w którym właśnie zaimplementowaliśmy obiekt naszego nowego równania (flow.py
) z określnikiem równania z kroku 1 ("Flow") na liście _EQUATIONS
w elmer/solver.py
.
from .equations import electrostatic
+from .equations import flow
...
_EQUATIONS = {
"Heat": heat,
"Elasticity": elasticity,
+ "Flow": flow,
}
W tym kroku zmodyfikujemy następujący plik:
Ten plik zawiera klasę Writer
, która eksportuje analizę do formatu SIF solvera Elmer.
Dla każdego wspieranego równania są dwie główne metody eksportu. Po prostu skopiuj je wszystkie z istniejącego równania i dostosuj je do swoich potrzeb.
_getFlowSolver
_handleFlow
Musisz zarejestrować metodę _handleFlow
w klasie Writer
:
class Writer(object):
...
def write(self):
...
self._handleFlow()
...
_handleFlow
może kontrolować serię innych złożonych metod. Nasze równanie przepływu korzysta z następujących złożonych metod:
_handleFlowConstants
_handleFlowMaterial
_handleFlowInitialVelocity
_handleFlowBndConditions
_handleFlowEquation
Zakończyliśmy teraz część funkcji nowego równania. Następnie połączymy nowe równanie poprzez GUI.
Właśnie utworzyliśmy klasę nowego równania. Aby mieć do niej dostęp z GUI środowiska pracy MES, musimy utworzyć przycisk i podłączyć go do klasy nowego równania. Tu znajduje się poradnik: Poradnik: Dodaj przycisk do paska narzędzi MES.